/***************************************************************************//**
 * @file	 csa37f7x_pwr.h
 * @version  V1.0.0
 * @author	 Chipsea MCU Group
 * @date	 2020-10-23 PM
 * @brief	 该文件包含了PMU各功能参数的定义和函数接口声明
 * 
 * @copyright Copyright (C) 2020 Chipsea Technologies Corp. All rights reserved.
 ****************************************************************************
* @attention
 *	硬件平台: CSA37F70 评估板V1.0 \n
 *	SDK版本：  CSA37F7X_SDK_1.0.0
 * 
 * @par 修改日志:
 * <table>
 * <tr><th>Date 	   <th>Version	<th>Author				<th>Description
 * <tr><td>2020/10/21  <td>1.0.0	<td>Chipsea MCU Group	<td>创建初始版本
 * </table>
 *
 *****************************************************************************/

#ifndef __CSA37F7X_PWR_H__
#define __CSA37F7X_PWR_H__

// Include external header file.
#include "csa37f7x.h"

#ifdef __cplusplus
extern "C" {
#endif

/** @addtogroup PWR 电源管理单元(PWR)
  电源管理单元包含系统电源分布和系统工作模式两部分。<br>
###特性: 
    - VDD 是芯片的供电电源， GND 是芯片的地。 VDD 在芯片内部分成 AVDD 和 DVDD 两组电
源； GND 内部分 AGND 和 DGND 两组地。
    - AVDD 和 AGND 作为一组模拟模块供电给 PGA+DAC、 SARADC、 LDO_VS、 Tempsensor、
POR/PDR、 PVD、模拟 IO、 TK。
    - DVDD 和 DGND 作为一组数字模块供电给 LDO_CAP、 HIRC8M、 HIRC14M、 LIRC、 GPIO、
PLL。
    - LDO_CAP 作为一组数字模块供电给 Flash、 SRAM、数字内核。
    
###电源分布图：
* \image html pwr.png 
  @{
*/


/**
  * @brief  等待模式定义
  */
typedef enum
{
    WFI_Mode = 0x00,        /*!<等待中断模式 */
    WFE_Mode = 0x01,        /*!<等待事件模式 */
} pwr_wfmode_t;

/**
  * @brief  睡眠模式定义
  */
typedef enum
{
	NORMAL_SLEEP_MODE   = 0x00,     /*!<正常睡眠模式     */
    DEEP_SLEEP_MODE1    = 0x01,     /*!<深度睡眠1*/
    DEEP_SLEEP_MODE2    = 0x02,     /*!<深度睡眠2*/
} pwr_sleepmode_t;

/**
  * @brief  PVD状态位定义
  */
typedef enum
{
	PVD_STATUS_FE       = 0x00,     /*!<PVD_OUT下降沿事件标志，1=检测到PVD_OUT下降沿事件，0=未检测到PVD_OUT下降沿事件*/
    PVD_STATUS_RE       = 0x01,     /*!<PVD_OUT上升沿事件标志，1=检测到PVD_OUT上升沿事件，0=未检测到PVD_OUT上升沿事件*/
    PVD_STATUS_OUT      = 0x02,     /*!<PVD比较器输出，1=待检测电压小于比较阈值电压，0=待检测电压大于比较阈值电压*/
} pwr_pvd_status_t;

/**
  * @brief  PVD检测对象选择
  */
#ifdef __CSA37F70__
typedef enum
{
    PWR_PVD_DEF_VDD     = 0x00,      /*!<VDD   */
    PWR_PVD_DEF_LDO_CAP = 0x02,      /*!<LDO_CAP */
    PWR_PVD_DEF_VS      = 0x03,      /*!<0.6*VS */
} pwr_pvd_def_t;
#else
typedef enum
{
    PWR_PVD_DEF_LDO_CAP = 0x00,      /*!<LDO_CAP */
    PWR_PVD_DEF_VS      = 0x02,      /*!<0.6*VS */
} pwr_pvd_def_t;
#endif

/**
  * @brief  PVD电压检测选择
  */
typedef enum
{
	PWR_PVD_VSEL_2V1    = 0x00,     /*!<2.1V */
	PWR_PVD_VSEL_2V2    = 0x01,     /*!<2.2V*/
	PWR_PVD_VSEL_2V3    = 0x02,     /*!<2.3V*/
	PWR_PVD_VSEL_2V4    = 0x03,     /*!<2.4V*/
	PWR_PVD_VSEL_2V5    = 0x04,     /*!<2.5V*/
	PWR_PVD_VSEL_2V6    = 0x05,     /*!<2.6V*/
	PWR_PVD_VSEL_2V7    = 0x06,     /*!<2.7V*/
	PWR_PVD_VSEL_2V8    = 0x07,     /*!<2.8V*/
} pwr_pvd_vsel_t;

/**
  * @brief  PVD配置结构体定义
  */
typedef struct
{
#ifdef	__CSA37F70__
	uint16_t       pwr_pvd_ref_sel;     /*!<PVD电压比较器参考电压输入端选择.1=外部电压输入端PB5，0=Vbg*/
#endif
    enable_state_t pwr_pvd_rie;         /*!<PVD 比较器输出上升沿中断使能 */
    enable_state_t pwr_pvd_fie;         /*!<PVD比较器输出下降沿中断使能 */
    pwr_pvd_def_t  pwr_pvd_det_sel;     /*!<PVD检测对象选择 */
    pwr_pvd_vsel_t pwr_pvd_vsel;        /*!<PVD电压检测选择 */
	enable_state_t pwr_pvd_en;          /*!<PVD使能 */
}pwr_pvdconfig_t;

/**@brief		电源进入睡眠模式

 *@param[in]	flag		睡眠模式选择
 *@param[in]	wf_mode		等待模式选择
 *@return		无
*/
void pwr_enter_sleep_mode(pwr_sleepmode_t flag,pwr_wfmode_t wf_mode);

/**@brief		电源睡眠中断使能

 *@param[in]	flag		睡眠模式选择
 *@param[in]	state 		中断使能或禁用配置
 *@return		无
*/
void pwr_sleep_interrupt_config(pwr_sleepmode_t flag,enable_state_t state);

/**@brief		芯片睡眠唤醒状态读取

 *@param[in]	flag		睡眠模式选择
 *@return		返回芯片被唤醒状态
*/
uint8_t pwr_sleep_wakeup_status_read(pwr_sleepmode_t flag);

/**@brief		芯片睡眠唤醒状态清除

 *@param[in]	flag		睡眠模式选择
 *@return		无
*/
void pwr_sleep_wakeup_status_clear(pwr_sleepmode_t flag);


/**@brief		电源PVD配置

 *@param[in]	pvd_initstruct		PVD结构体
 *@return		无
*/
void pwr_pvd_config(pwr_pvdconfig_t *pvd_initstruct);

/**@brief		电源PVD状态获取

 *@param[in]	flag		PVD状态位选择
 *@return		返回选择的PVD状态位对应状态值
*/
uint8_t pwr_pvd_status_get(pwr_pvd_status_t flag);



/*@}*/ /* end of group PWR */

#ifdef __cplusplus
}
#endif

#endif  //__CSA37F7X_PWR_H__

/*** (C) COPYRIGHT 2020 Chipsea Technologies (Shenzhen) Corp. ***/

